import { defineStore } from 'pinia';
import { ref, watch } from 'vue';

function initState() {
    return {
        tags: [
            {
                path: "/home",
                name: "home",
                label: "首页",
                icon: "home",
            },
        ],
        currentMenu: null,
        menuList: [],
        token: "",
        routerList: []
    };
}

export const useAllDataStore = defineStore('allData', () => {
    const state = ref(initState());


    watch(state, (newObj) => {
        if (!newObj.token) return;
        // 监听 state 的变化，将其存储到 localStorage 中
        // console.log("// 监听 state 的变化，将其存储到 localStorage 中", newObj);

        localStorage.setItem("store", JSON.stringify(newObj));
    }, { deep: true });


    function selectMenu(val) {
        if (val.name === 'home') {
            state.value.currentMenu = null;
        } else {
            state.value.currentMenu = val;

            let index = state.value.tags.findIndex(item => item.name === val.name);
            index === -1 ? state.value.tags.push(val) : "";
        }
    }

    function updateTags(tag) {
        let index = state.value.tags.findIndex(item => item.name === tag.name);
        state.value.tags.splice(index, 1);
    }

    function updateMenuList(val) {
        state.value.menuList = val;
    }

    function addMenu(router, type) {
        if (type === 'refresh') {
            if (JSON.parse(localStorage.getItem("store"))) {
                state.value = JSON.parse(localStorage.getItem("store"));
                state.value.routerList = []
            } else {
                return
            }
        }
        const menu = state.value.menuList;
        const module = import.meta.glob('../views/**/*.vue');
        const routArr = [];
        menu.forEach(item => {
            if (item.children) {
                item.children.forEach(val => {
                    let url = `../views/${val.url}.vue`;
                    val.component = module[url];
                    routArr.push(...item.children);
                });
            } else {
                let url = `../views/${item.url}.vue`;
                item.component = module[url];
                routArr.push(item);
            }
        });
        state.value.routerList = []
        let routers = router.getRoutes();
        routers.forEach(item => {
            if (item.name == "main" || item.name == "login" || item.name == "404") {
                return;
            } else {
                router.removeRoute(item.name);
            }
        });
        routArr.forEach(item => {
            state.value.routerList.push(router.addRoute("main", item));
        });
    }

    function clean() {
        state.value.routerList.forEach(item => {
            if (item) item();
        })
        state.value = initState
        localStorage.removeItem("store");
    }

    return {
        state, // 返回完整的 state
        selectMenu,
        updateTags,
        updateMenuList,
        addMenu, // 确保 addMenu 被返回,
        clean
    };
});